#pragma once

#include "TcpServer.h"
#include "EventLoop.h"
#include "Connection.h"
#include "ThreadPool.h"

/*
    EchoServer类：回显服务器
*/

class EchoServer
{
private:
    TcpServer tcpserver_;
    ThreadPool threadpool_;// 工作线程

public:
    EchoServer(const std::string &ip, const uint16_t port,int threadnum=3,int workthreadnum=5);
    ~EchoServer();

    void Start(); // 启动服务

    void HandleNewConnection(std::shared_ptr<Connection> conn);        // 处理新客户端连接请求，在 TcpServer 类中回调此函数。
    void HandleClose(std::shared_ptr<Connection> conn);                  // 关闭客户端的连接，在 TcpServer 类中回调此函数。
    void HandleError(std::shared_ptr<Connection> conn);                  // 客户端的连接报错，在 TcpServer 类中回调此函数。
    void HandleMessage(std::shared_ptr<Connection> conn, std::string& message); // 处理客户端的请求报文，在 TcpServer 类中回调此函数。
    void HandleSendComplete(std::shared_ptr<Connection> conn);           // 数据发送完成后，在 TcpServer 类中回调此函数。
    void HandleTimeout(EventLoop *loop);                 // epoll_wait() 超时，在 TcpServer 类中回调此函数。

    void OnMessage(std::shared_ptr<Connection> conn, std::string& message);
};
